/**
 * 脚本加载期间，在脚本标签后面创建 HTML 标签
 * @param tagName 要创建标签的标签名，默认为 div
 * @description 如果调用多次，将会在脚本标签后面依次创建多个标签
 * @warn 只能在脚本启动时执行，否则会导致整个页面空白
 */
export function createElement<K extends keyof HTMLElementTagNameMap>(tagName: K): HTMLElementTagNameMap[K];
/**
 * 脚本加载期间，在脚本标签后面创建 HTML 标签
 * @param tagName 要创建标签的标签名，默认为 div
 * @description 如果调用多次，将会在脚本标签后面依次创建多个标签
 * @warn **警告** 只能在脚本启动时执行，否则会导致整个页面空白
 */
export function createElement<K extends keyof HTMLElementDeprecatedTagNameMap>(tagName: K): HTMLElementDeprecatedTagNameMap[K];
/**
 * 脚本加载期间，在脚本标签后面创建 HTML 标签
 * @param tagName 要创建标签的标签名，默认为 div
 * @description 如果调用多次，将会在脚本标签后面依次创建多个标签
 * @warn **警告** 只能在脚本启动时执行，否则会导致整个页面空白
 */
export function createElement(tagName: string): HTMLElement;
/**
 * 脚本加载期间，在脚本标签后面创建 div 标签
 * @description 如果调用多次，将会在脚本标签后面依次创建多个标签
 * @warn **警告** 只能在脚本启动时执行，否则会导致整个页面空白
 */
export function createElement(): HTMLDivElement;
export function createElement(tagName = 'div'): HTMLElement {
	/**
	 * 随机生成要插入页面的元素的 id
	 * 随机数设置了很大，如果你在一次打开中能两次拿到相同的 id ，我想你可以去买彩票了
	 */
	const id = '____support4pack_tag_id_' + Math.floor(Math.random() * 10000000000);
	document.write(`<${tagName} id='${id}'></${tagName}>`);
	const element = document.getElementById(id) as HTMLElement;
	/**
	 * 拿到元素后，抓紧把 id 属性删了
	 * 免得该买彩票了还不知道，却以为程序出了问题
	 * （避免因为生成的 id 相同，造成第二次拿元素还是拿到第一次生成的元素）
	 */
	element.removeAttribute('id');
	return element;
}
export default createElement;